package org.example.mq.common.tools;

import java.io.*;

//序列化工具类
public class BinaryTool {
    //转换成流对象
    public static byte[] toBytes(Object object){
        try {
            //将object放进流对象容器中
            // ObjectOutputStream 是 Java 专门用来实现“对象序列化”的类，
            // 它懂得如何把对象写成字节流，而 ByteArrayOutputStream 只是一个原始的字节容器，不具备序列化对象的能力。
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);

            //这里的writeObject就是把object进行序列化，结果写入到objectStream
            //而objectStream 关联  byteArrayStream，所以最终结果写到了byteArray
            objectOutputStream.writeObject(object);

            return byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //反序列化
    public static Object toObject(byte[] bytes){
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
            return (Object) objectInputStream.readObject();
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
